多模态图片到底该传Base64还是File URI
前言
给推理和训练链路加入图片输入时,最先遇到的不是 Vision Encoder,而是图片到底怎么穿过 SDK、Router、Actor 和 vLLM。
常见选择有:
- Base64 Data URL
- 本地 File URI
- 远程 HTTP URL
- 对象存储签名 URL
这些方式都能把图片送到模型,但请求体大小、解码成本、安全边界和部署要求完全不同。为了不靠感觉选方案,调研中对 File URI 和 Base64 做了同口径性能测试,并把实际链路中的限制一并梳理了一遍。
Base64的成本不只是33%
Base64 每 3 字节编码成 4 个字符,体积理论上增加约 33%。
一张 7.09 MB PNG 放进 JSON 后,请求体会变成约 9.45 MB。除此之外还要经过:
1 | 客户端Base64编码 |
File URI 的请求体可能只有几百字节,vLLM 在本机直接读取文件,因此省掉了大部分传输和 JSON 处理。
不过 File URI 只在 Actor 与 vLLM 共享文件系统时成立。跨机器部署中,file:///tmp/a.png 对另一台机器没有任何意义, 除非使用对象存储, 那种集群内共享的文件系统
实测结果
测试使用 1536×1536 图片,覆盖 JPEG、PNG、WebP;每组 3 次 warmup、30 次正式请求,并测试并发 1 和并发 8。关闭 Multimodal Processor Cache,固定 max_tokens=1,尽量把差异集中在图片输入和首字阶段。
部分结果如下:
| 格式 | 大小 | 并发 | 方式 | TTFT P50 | TTFT P95 | 吞吐 |
|---|---|---|---|---|---|---|
| JPEG | 2.29 MB | 1 | File URI | 346 ms | 356 ms | 2.876 req/s |
| JPEG | 2.29 MB | 1 | Base64 | 353 ms | 357 ms | 2.847 req/s |
| PNG | 7.09 MB | 8 | File URI | 1398 ms | 1753 ms | 5.438 req/s |
| PNG | 7.09 MB | 8 | Base64 | 1421 ms | 1860 ms | 5.242 req/s |
| WebP | 2.08 MB | 1 | File URI | 482 ms | 491 ms | 2.089 req/s |
| WebP | 2.08 MB | 1 | Base64 | 488 ms | 495 ms | 2.052 req/s |
小 JPEG 在本机回环网络中差距不大。大 PNG 在并发 8 时,Base64 吞吐下降约 3.6%,P95 TTFT 增加约 108 ms。
更有意思的是 WebP。它只有 2.08 MB,比 JPEG 还小,但服务端图片加载约 160 ms,明显高于 JPEG 的 32 ms 和 PNG 的 49 ms。
所以文件体积不等于图片处理成本。为了省网络把图片全部转 WebP,不一定会让端到端推理更快。
为什么不让SDK默认压缩
SDK 自动把所有图片转成 JPEG 看起来很方便,但会带来几个问题:
- 文本、表格和细线可能被有损压缩破坏
- 不同 SDK 版本可能得到不同输入
- 训练数据无法稳定复现
- 用户不知道原图已经被修改
更合理的做法是提供显式压缩或转换选项,而不是静默处理。
默认只校验边界并保持用户输入;确实需要控制成本时,由用户明确选择 JPEG 质量或最大尺寸。
图文顺序不能丢
多模态输入不是“文本字段加一个 images 数组”这么简单。例如:
1 | 文字A → 图片1 → 文字B → 图片2 |
如果传输时把所有文字拼在一起、图片另放一个列表,模型接收到的语义顺序就变了。
SDK 因此使用按原始顺序排列的 chunk:
1 | TextChunk |
Sampling 和 Training 都透传相同顺序。Actor 转换为 vLLM 或 Trainer 输入时也不能按类型重新分组。
外部Base64,内部File URI
综合部署和性能,最终形成的是分层方案:
1 | 用户 / SDK |
这样外部协议不依赖共享文件系统,内部又不需要在每一跳重复携带几 MB Base64。
暂存目录必须是 Actor/Sampler 私有共享路径,不能让用户提交任意 file://。文件名由服务端生成,请求完成或 TTL 到期后清理。
最后
图片传输方案不能只比较“哪个格式小”。Base64 的优势是自包含和跨机器,File URI 的优势是本地链路开销低;WebP 文件小但解码未必快;自动压缩省流量却可能破坏训练语义。
真正可用的多模态链路还要同时保证顺序、边界校验、图片清理、视觉 token 限制和跨服务协议一致。
相关记录:
多模态图片到底该传Base64还是File URI
https://blog.novashen.top/2026/07/24/tech/AI Infra/多模态图片到底该传Base64还是File-URI/